home *** CD-ROM | disk | FTP | other *** search
-
- 10 REM PRODOS CATALOG SORT ROUTINE
- 20 REM ANTONIO C. SILVESTRI
- 30 REM SYSTEMS CONSULTANTS INC.
-
- 40 CLEAR: TEXT: HOME: DB = PEEK(115) + 256*PEEK(116)
- 50 FOR I=768 TO 792: READ H: POKE I,H: NEXT
- 60 DIM DIM NA$(55), ST(30), ST$(30), DL(10): N = 0: V = 2:
- V$ = "": GOSUB 460
-
- 70 VTAB 2: HTAB 6: PRINT "PRODOS FILENAME SORT UTILITY":
- VTAB 9: HTAB 10: PRINT "INSERT DISK IN ";:
- FLASH: PRINT "DRIVE 1";: NORMAL: PRINT:
- HTAB 9: PRINT "HIT ANY KEY TO CONTINUE"
- 80 POKE - 16368,0: WAIT - 16384,128: POKE - 16368,0
-
- 90 HOME: PRINT "SEARCHING FOR VALID FILENAMES": PRINT
- 100 IF N <= 0 THEN 450
- 110 GOSUB 480: BL = V: HE = V: HE$ = V$: CO = 0: BC = 0
- 120 POKE 791,BL - 256*INT(BL/256): POKE 792,INT(BL/256):
- POKE 776,128: CALL 768: IF PEEK(786) <> 0 THEN
- PRINT "ERROR IN READING BLOCK NO. ";BL: STOP
- 130 BC = BC + 1: DL(BC) = BL
- 140 FOR J=0 TO 12: IF J <> 0 THEN 180
- 150 IF BL=HE THEN DR$ = "":
- FOR I=0 TO 38: DR$ = DR$ + CHR$(PEEK(DB + 4 + I)): NEXT:
- HE$ = HE$+"/"+MID$(DR$,2,PEEK(DB+4)-16*INT(PEEK(DB+4)/16)):
- PRINT "READING DIRECTORY: ";HE$
- 160 PRINT "BLOCK NO. ";BL;" READ"
- 170 IF BL = HE THEN 210
- 180 IF PEEK (DB + 4 + J * 39) = 0 THEN PRINT "D";: GOTO 210
- 190 PRINT ".";: CO = CO + 1: NA$(CO) = "":
- FOR I=0 TO 38: NA$(CO)=NA$(CO)+CHR$(PEEK(DB+4+J*39+I)): NEXT
- 200 IF ASC(MID$(NA$(CO),17,1))=15 THEN
- V = ASC(MID$(NA$(CO),18,1)) + 256*ASC(MID$(NA$(CO),19,1)):
- V$ = HE$: GOSUB 460
- 210 NEXT J: PRINT: PRINT: X = FRE (0):
- BL = PEEK(DB+2) + 256*PEEK(DB+3): IF BL <> 0 THEN 120
-
- 220 IF CO=0 THEN HOME: VTAB 10: FLASH:
- PRINT "**WARNING**"; CHR$ (7);: NORMAL:
- PRINT "NO FILENAMES CAN BE FOUND": GOTO 290
- 230 IF CO=1 THEN 290
- 240 HOME: VTAB 10: PRINT CO;" FILENAMES FOUND";: HTAB 29:
- PRINT "NOW ";: FLASH: PRINT "SORTING": NORMAL: NX = CO
- 250 VTAB 17: HTAB 8: PRINT "FILENAMES HAVE BEEN PLACED"
- 260 VTAB 17: HTAB 7 - LEN(STR$(CO - NX)): PRINT CO - NX
- 270 FLAG = 0: FOR I = 2 TO NX:
- IF MID$(NA$(I),2,15) < MID$(NA$(I-1),2,15) THEN
- H$ = NA$(I): NA$(I) = NA$(I-1): NA$(I - 1) = H$:
- FLAG = 1
- 280 NEXT: X = FRE(0): NX = NX - 1:
- IF FLAG = 1 AND NX <> 1 THEN 260
-
- 290 HOME: PRINT "STORING PURGED AND SORTED DIRECTORY": PRINT
- 300 A = 1: B = 0: FOR J = 1 TO BC
- 310 PRINT "NOW FORMING BLOCK NO. "; DL(J)
- 320 IF J = 1 THEN AX = 0: GOTO 340
- 330 AX = DL(J - 1)
- 340 IF J = BC THEN BX = 0: GOTO 360
- 350 BX = DL(J + 1)
- 360 POKE DB,AX-256*INT(AX/256): POKE DB+1, INT(AX/256):
- POKE DB+2,BX-256*INT(BX/256): POKE DB+3, INT(BX/256):
- POKE DB+511,0
- 370 IF J = 1 THEN
- FOR K=1 TO 39: POKE DB+3+B*39+K,ASC(MID$(DR$,K,1)): NEXT:
- PRINT ".";:B = B + 1
- 380 IF A <= CO THEN
- FOR K=1 TO 39: POKE DB+3+B*39+K,ASC(MID$(NA$(A),K,1)): NEXT:
- PRINT ".";: GOTO 400
- 390 FOR K=1 TO 39: POKE DB+3+B*39+K,0: NEXT: PRINT "Z";
- 400 A = A+1: B = B+1: IF B < 13 THEN 380
- 410 PRINT: PRINT: B = 0: POKE 791,DL(J)-256*INT(DL(J)/256):
- POKE 792, INT(DL(J)/256): POKE 776,129: CALL 768
- 420 IF PEEK(786) <> 0 THEN
- PRINT "ERROR IN WRITING BLOCK NO.";DL(J): STOP
- 430 NEXT J: GOTO 90
- 440 DATA 169, 0, 141, 18, 3, 32, 0, 191, 0, 19, 3, 176, 1,
- 96, 238, 18, 3, 96 , 0, 3, 96, 0, 150, 0, 0
- 450 END
-
-
- 460 IF N >= 30 THEN
- PRINT "STACK OVERFLOW": STOP
- 470 N = N+1: ST(N)=V: ST$(N)=V$: RETURN
- 480 IF N <= 0 THEN
- PRINT "STACK UNDERFLOW": STOP
- 490 V = ST(N): V$ = ST$(N): N = N-1: RETURN
-
-
- The PRODOS Diskette Sorting Utility
- Listing #1
-
-